#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
#include "Queue.h"
typedef int DataType;
typedef struct TNode
{
    DataType data_;
    struct TNode *right_;
    struct TNode *left_;
} TNode;
TNode *BuyTreeNode(DataType val);
// 二叉树前序遍历
void PreOrder(TNode *root);
// 二叉树中序遍历
void InOrder(TNode *root);
// 二叉树后序遍历
void PostOrder(TNode *root);
// 二叉树层序遍历
void LevelOrder(TNode *root);
// 二叉树节点个数
int BinaryTreeSize(TNode *root);
// 二叉树叶子节点个数
int BinaryTreeLeafSize(TNode *root);
// 二叉树第k层节点个数
int BinaryTreeLevelKSize(TNode *root, int k);
// 二叉树查找值为x的节点
TNode *BinaryTreeFind(TNode *root, DataType x);
// 销毁
void BinaryTreeDestory(TNode **root);
// 求二叉树的深度
int hight(TNode *root);
// 通过前序遍历的数组 "ABD##E#H##CF##G##"构建二叉树
TNode *BinaryTreeCreate(DataType *a, int *pi);